#include "main.h"

// 要求将所有代码写在本文件内

int ListInitiate(SLNode **head)/*初始化*/ {

    *head=(SLNode*) malloc(sizeof (SLNode));
    (*head)->next=NULL;
    return 0;
}

int ListLength(SLNode *head) /* 单链表的长度*/{
    SLNode *p=head;
    int size=0;
    while(p->next!=NULL){
        p=p->next;
        size++;
    }
  return size;
}

int ListInsert(SLNode *head, int i, DataType x) {
    SLNode *p,*q;
    int j;
    int before_i=i-1;
    p=head;
    j=-1;
    while(p->next!=NULL&&j< before_i ){
        p=p->next;
        j++;
    }
    if(j==before_i)
    {
    q=(SLNode*) malloc(sizeof (SLNode));
    q->data=x;
    q->next=p->next;
    p->next=q;
    return 0;
    }
    return 1;
}

int ListDelete(SLNode *head, int i, DataType *x) {
    SLNode *p,*s;
    int j;
    p=head;
    j=0;
    while (p->next!=NULL&&j<i){
        p=p->next;
        j++;
    }
    if(j==i)
    {
        s = p->next;
        *x = s->data;
        p->next = p->next->next;
        free(s);
        return 0;
    }
    return 1;
}

int ListGet(SLNode *head, int i, DataType *x) {
    SLNode *p;
    int j;
    p=head;
    j=-1;//
    while (p->next!=NULL&&j<i){
        p=p->next;
        j++;
    }
    if(j!=i)return 1;
    *x=p->data;
    return 0;
}

int Destroy(SLNode **head)
{
    SLNode *p,*p1;
    p=*head;
    while(p!=NULL){
        p1=p;
        p=p->next;
        free(p1);
        return 0;
    }   *head=NULL;
    return 1;

}

void main(void) {
  SLNode *head;
  int i , x;
  ListInitiate(&head);/*初始化*/

  for(i = 0; i < 10; i++){
        if(ListInsert(head, i, i+1) == 1) /*插入10个数据元素*/
        {
            printf("错误！ \n");
            return;
        }
    }

  if(ListDelete(head, 4, &x) == 1) { /*删除数据元素5*/
    printf("错误！ \n");
      return;
  }


  for(i = 0; i < ListLength(head); i++) {
    if(ListGet(head, i, &x) == 1) /*取元素*/
      {
        printf("错误！ \n");
        return;
      }
    else printf("%d     ", x);/*显示数据元素*/
  }
  Destroy(&head);
}
